home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 4: GNU Archives / Linux Cubed Series 4 - GNU Archives.iso / gnu / termutil.0 / termutil / termutils-2.0 / conversions.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-09-03  |  9.1 KB  |  382 lines

  1. /* conversions.c -- table of termcap/terminfo equivalencies
  2.    Copyright (C) 1991, 1995 Free Software Foundation, Inc.
  3.  
  4.    This program is free software; you can redistribute it and/or modify
  5.    it under the terms of the GNU General Public License as published by
  6.    the Free Software Foundation; either version 2, or (at your option)
  7.    any later version.
  8.  
  9.    This program is distributed in the hope that it will be useful,
  10.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.    GNU General Public License for more details.
  13.  
  14.    You should have received a copy of the GNU General Public License
  15.    along with this program; if not, write to the Free Software
  16.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  17.  
  18. #ifdef HAVE_CONFIG_H
  19. #include "config.h"
  20. #endif
  21.  
  22. #include "tput.h"
  23.  
  24. /* `conversions' is binary-searched to retrieve the termcap equivalent
  25.    of the given terminfo capability, along with information about what
  26.    type of capability it is.  If you add entries, keep the table sorted
  27.    by terminfo capability */
  28.  
  29. static struct conversion conversions[] =
  30. {
  31.   {"acsc", "ac", STR},
  32.   {"am", "am", BOOL},
  33.   {"bel", "bl", STR},
  34.   {"blink", "mb", STR},
  35.   {"bold", "md", STR},
  36.   {"bw", "bw", BOOL},
  37.   {"cbt", "bt", STR},
  38.   {"chts", "HC", BOOL},
  39.   {"civis", "vi", STR},
  40.   {"clear", "cl", STR | PAD},
  41.   {"cmdch", "CC", STR},
  42.   {"cnorm", "ve", STR},
  43.   {"cols", "co", NUM},
  44.   {"cr", "cr", STR},
  45.   {"csr", "cs", STR},
  46.   {"cub", "LE", STR},
  47.   {"cub1", "le", STR},
  48.   {"cud", "DO", STR | PAD},
  49.   {"cud1", "do", STR},
  50.   {"cuf", "RI", STR},
  51.   {"cuf1", "nd", STR},
  52.   {"cup", "cm", STR},
  53.   {"cuu", "UP", STR},
  54.   {"cuu1", "up", STR},
  55.   {"cvvis", "vs", STR},
  56.   {"da", "da", BOOL},
  57.   {"db", "db", BOOL},
  58.   {"dch", "DC", STR},
  59.   {"dch1", "dc", STR},
  60.   {"dim", "mh", STR},
  61.   {"dl", "DL", STR | PAD},
  62.   {"dl1", "dl", STR},
  63.   {"dsl", "ds", STR},
  64.   {"ech", "ec", STR},
  65.   {"ed", "cd", STR | PAD},
  66.   {"el", "ce", STR},
  67.   {"el1", "cb", STR},
  68.   {"enacs", "eA", STR},
  69.   {"eo", "eo", BOOL},
  70.   {"eslok", "es", BOOL},
  71.   {"ff", "ff", STR},
  72.   {"flash", "vb", STR},
  73.   {"fsl", "fs", STR},
  74.   {"gn", "gn", BOOL},
  75.   {"hc", "hc", BOOL},
  76.   {"hd", "hd", STR},
  77.   {"home", "ho", STR},
  78.   {"hpa", "ch", STR},
  79.   {"hs", "hs", BOOL},
  80.   {"ht", "ta", STR},
  81.   {"hts", "st", STR},
  82.   {"hu", "hu", STR},
  83.   {"hz", "hz", BOOL},
  84.   {"ich", "IC", STR},
  85.   {"ich1", "ic", STR},
  86.   {"if", "if", STR},
  87.   {"il", "AL", STR | PAD},
  88.   {"il1", "al", STR},
  89.   {"in", "in", BOOL},
  90.   {"ind", "sf", STR},
  91.   {"indn", "SF", STR | PAD},
  92.   {"invis", "mk", STR},
  93.   {"ip", "ip", STR},
  94.   {"iprog", "iP", STR},
  95.   {"is1", "i1", STR},
  96.   {"is2", "is", STR},
  97.   {"is3", "i3", STR},
  98.   {"it", "it", NUM},
  99.   {"kBEG", "&9", STR},
  100.   {"kCAN", "&0", STR},
  101.   {"kCMD", "*1", STR},
  102.   {"kCPY", "*2", STR},
  103.   {"kCRT", "*3", STR},
  104.   {"kDC", "*4", STR},
  105.   {"kDL", "*5", STR},
  106.   {"kEND", "*7", STR},
  107.   {"kEOL", "*8", STR},
  108.   {"kEXT", "*9", STR},
  109.   {"kFND", "*0", STR},
  110.   {"kHLP", "#1", STR},
  111.   {"kHOM", "#2", STR},
  112.   {"kIC", "#3", STR},
  113.   {"kLFT", "#4", STR},
  114.   {"kMOV", "%b", STR},
  115.   {"kMSG", "%a", STR},
  116.   {"kNXT", "%c", STR},
  117.   {"kOPT", "%d", STR},
  118.   {"kPRT", "%f", STR},
  119.   {"kPRV", "%e", STR},
  120.   {"kRDO", "%g", STR},
  121.   {"kRES", "%j", STR},
  122.   {"kRIT", "%i", STR},
  123.   {"kRPL", "%h", STR},
  124.   {"kSAV", "!1", STR},
  125.   {"kSPD", "!2", STR},
  126.   {"kUND", "!3", STR},
  127.   {"ka1", "K1", STR},
  128.   {"ka3", "K3", STR},
  129.   {"kb2", "K2", STR},
  130.   {"kbeg", "@1", STR},
  131.   {"kbs", "kb", STR},
  132.   {"kc1", "K4", STR},
  133.   {"kc3", "K5", STR},
  134.   {"kcan", "@2", STR},
  135.   {"kcbt", "kB", STR},
  136.   {"kclo", "@3", STR},
  137.   {"kclr", "kC", STR},
  138.   {"kcmd", "@4", STR},
  139.   {"kcpy", "@5", STR},
  140.   {"kcrt", "@6", STR},
  141.   {"kctab", "kt", STR},
  142.   {"kcub1", "kl", STR},
  143.   {"kcud1", "kd", STR},
  144.   {"kcuf1", "kr", STR},
  145.   {"kcuu1", "ku", STR},
  146.   {"kdch1", "kD", STR},
  147.   {"kdl1", "kL", STR},
  148.   {"ked", "kS", STR},
  149.   {"kel", "kE", STR},
  150.   {"kend", "@7", STR},
  151.   {"kent", "@8", STR},
  152.   {"kext", "@9", STR},
  153.   {"kf0", "k0", STR},
  154.   {"kf1", "k1", STR},
  155.   {"kf10", "k;", STR},
  156.   {"kf11", "F1", STR},
  157.   {"kf12", "F2", STR},
  158.   {"kf13", "F3", STR},
  159.   {"kf14", "F4", STR},
  160.   {"kf15", "F5", STR},
  161.   {"kf16", "F6", STR},
  162.   {"kf17", "F7", STR},
  163.   {"kf18", "F8", STR},
  164.   {"kf19", "F9", STR},
  165.   {"kf2", "k2", STR},
  166.   {"kf20", "FA", STR},
  167.   {"kf21", "FB", STR},
  168.   {"kf22", "FC", STR},
  169.   {"kf23", "FD", STR},
  170.   {"kf24", "FE", STR},
  171.   {"kf25", "FF", STR},
  172.   {"kf26", "FG", STR},
  173.   {"kf27", "FH", STR},
  174.   {"kf28", "FI", STR},
  175.   {"kf29", "FJ", STR},
  176.   {"kf3", "k3", STR},
  177.   {"kf30", "FK", STR},
  178.   {"kf31", "FL", STR},
  179.   {"kf32", "FM", STR},
  180.   {"kf33", "FN", STR},
  181.   {"kf34", "FO", STR},
  182.   {"kf35", "FP", STR},
  183.   {"kf36", "FQ", STR},
  184.   {"kf37", "FR", STR},
  185.   {"kf38", "FS", STR},
  186.   {"kf39", "FT", STR},
  187.   {"kf4", "k4", STR},
  188.   {"kf40", "FU", STR},
  189.   {"kf41", "FV", STR},
  190.   {"kf42", "FW", STR},
  191.   {"kf43", "FX", STR},
  192.   {"kf44", "FY", STR},
  193.   {"kf45", "FZ", STR},
  194.   {"kf46", "Fa", STR},
  195.   {"kf47", "Fb", STR},
  196.   {"kf48", "Fc", STR},
  197.   {"kf49", "Fd", STR},
  198.   {"kf5", "k5", STR},
  199.   {"kf50", "Fe", STR},
  200.   {"kf51", "Ff", STR},
  201.   {"kf52", "Fg", STR},
  202.   {"kf53", "Fh", STR},
  203.   {"kf54", "Fi", STR},
  204.   {"kf55", "Fj", STR},
  205.   {"kf56", "Fk", STR},
  206.   {"kf57", "Fl", STR},
  207.   {"kf58", "Fm", STR},
  208.   {"kf59", "Fn", STR},
  209.   {"kf6", "k6", STR},
  210.   {"kf60", "Fo", STR},
  211.   {"kf61", "Fp", STR},
  212.   {"kf62", "Fq", STR},
  213.   {"kf63", "Fr", STR},
  214.   {"kf7", "k7", STR},
  215.   {"kf8", "k8", STR},
  216.   {"kf9", "k9", STR},
  217.   {"kfnd", "@0", STR},
  218.   {"khlp", "%1", STR},
  219.   {"khome", "kh", STR},
  220.   {"khts", "kT", STR},
  221.   {"kich1", "kI", STR},
  222.   {"kil1", "kA", STR},
  223.   {"kind", "kF", STR},
  224.   {"kll", "kH", STR},
  225.   {"km", "km", BOOL},
  226.   {"kmov", "%4", STR},
  227.   {"kmrk", "%2", STR},
  228.   {"kmsg", "%3", STR},
  229.   {"knp", "kN", STR},
  230.   {"knxt", "%5", STR},
  231.   {"kopn", "%6", STR},
  232.   {"kopt", "%7", STR},
  233.   {"kpp", "kP", STR},
  234.   {"kprt", "%9", STR},
  235.   {"kprv", "%8", STR},
  236.   {"krdo", "%0", STR},
  237.   {"kref", "&1", STR},
  238.   {"kres", "&5", STR},
  239.   {"krfr", "&2", STR},
  240.   {"kri", "kR", STR},
  241.   {"krmir", "kM", STR},
  242.   {"krpl", "&3", STR},
  243.   {"krst", "&4", STR},
  244.   {"ksav", "&6", STR},
  245.   {"kslt", "*6", STR},
  246.   {"kspd", "&7", STR},
  247.   {"ktbc", "ka", STR},
  248.   {"kund", "&8", STR},
  249.   {"lf0", "l0", STR},
  250.   {"lf1", "l1", STR},
  251.   {"lf10", "la", STR},
  252.   {"lf2", "l2", STR},
  253.   {"lf3", "l3", STR},
  254.   {"lf4", "l4", STR},
  255.   {"lf5", "l5", STR},
  256.   {"lf6", "l6", STR},
  257.   {"lf7", "l7", STR},
  258.   {"lf8", "l8", STR},
  259.   {"lf9", "l9", STR},
  260.   {"lh", "lh", NUM},
  261.   {"lines", "li", NUM},
  262.   {"ll", "ll", STR},
  263.   {"lm", "lm", NUM},
  264.   {"lw", "lw", NUM},
  265.   {"mc0", "ps", STR},
  266.   {"mc4", "pf", STR},
  267.   {"mc5", "po", STR},
  268.   {"mc5i", "5i", BOOL},
  269.   {"mc5p", "pO", STR},
  270.   {"mgc", "MC", STR},
  271.   {"mir", "mi", BOOL},
  272.   {"mrcup", "CM", STR},
  273.   {"msgr", "ms", BOOL},
  274.   {"nel", "nw", STR},
  275.   {"nlab", "Nl", NUM},
  276.   {"npc", "NP", BOOL},
  277.   {"nrrmc", "NR", BOOL},
  278.   {"nxon", "nx", BOOL},
  279.   {"os", "os", BOOL},
  280.   {"pad", "pc", STR},
  281.   {"pb", "pb", NUM},
  282.   {"pfkey", "pk", STR},
  283.   {"pfloc", "pl", STR},
  284.   {"pfx", "px", STR},
  285.   {"pln", "pn", STR},
  286.   {"prot", "mp", STR},
  287.   {"rc", "rc", STR},
  288.   {"rep", "rp", STR},
  289.   {"rev", "mr", STR},
  290.   {"rf", "rf", STR},
  291.   {"rfi", "RF", STR},
  292.   {"ri", "sr", STR},
  293.   {"rin", "SR", STR | PAD},
  294.   {"rmacs", "ae", STR},
  295.   {"rmam", "RA", STR},
  296.   {"rmcup", "te", STR},
  297.   {"rmdc", "ed", STR},
  298.   {"rmir", "ei", STR},
  299.   {"rmkx", "ke", STR},
  300.   {"rmln", "LF", STR},
  301.   {"rmm", "mo", STR},
  302.   {"rmp", "rP", STR},
  303.   {"rmso", "se", STR},
  304.   {"rmul", "ue", STR},
  305.   {"rmxon", "RX", STR},
  306.   {"rs1", "r1", STR},
  307.   {"rs2", "r2", STR},
  308.   {"rs3", "r3", STR},
  309.   {"sc", "sc", STR},
  310.   {"sgr", "sa", STR},
  311.   {"sgr0", "me", STR},
  312.   {"smacs", "as", STR},
  313.   {"smam", "SA", STR},
  314.   {"smcup", "ti", STR},
  315.   {"smdc", "dm", STR},
  316.   {"smgl", "ML", STR},
  317.   {"smgr", "MR", STR},
  318.   {"smir", "im", STR},
  319.   {"smkx", "ks", STR},
  320.   {"smln", "LO", STR},
  321.   {"smm", "mm", STR},
  322.   {"smso", "so", STR},
  323.   {"smul", "us", STR},
  324.   {"smxon", "SX", STR},
  325.   {"tbc", "ct", STR},
  326.   {"tsl", "ts", STR},
  327.   {"uc", "uc", STR},
  328.   {"ul", "ul", BOOL},
  329.   {"vpa", "cv", STR},
  330.   {"vt", "vt", NUM},
  331.   {"wind", "wi", STR},
  332.   {"wsl", "ws", NUM},
  333.   {"xenl", "xn", BOOL},
  334.   {"xhp", "xs", BOOL},
  335.   {"xmc", "sg", NUM},
  336.   {"xoffc", "XF", STR},
  337.   {"xon", "xo", BOOL},
  338.   {"xonc", "XN", STR},
  339.   {"xsb", "xb", BOOL},
  340.   {"xt", "xt", BOOL}
  341. };
  342.  
  343. #define CAPABILITIES (sizeof (conversions) / sizeof (conversions[0]))
  344.  
  345. char *bsearch ();
  346.  
  347. /* Terminfo capability name comparison function for bsearch. */
  348.  
  349. static int
  350. info_compare (conv1, conv2)
  351.      struct conversion *conv1, *conv2;
  352. {
  353.   return strcmp (conv1->info, conv2->info);
  354. }
  355.  
  356. /* Return a pointer to the conversion table entry for terminfo
  357.    capability INFONAME.
  358.    Return NULL if INFONAME is not a valid terminfo capability. */
  359.  
  360. struct conversion *
  361. find_info (infoname, termcap_only)
  362.      char *infoname;
  363.      int termcap_only;
  364. {
  365.   struct conversion conv, *found;
  366.  
  367.   conv.info = infoname;
  368.   found = 0;
  369.   if (termcap_only == 0)
  370.     found = (struct conversion *)
  371.       bsearch ((char *) &conv, (char *) conversions, CAPABILITIES,
  372.            sizeof (struct conversion), info_compare);
  373.   if (found)
  374.     return found;
  375.   /* We have to do linear search for termcap symbols.  Might be worth
  376.      building perfect hash table for both */
  377.   for (found = conversions; found < &conversions[CAPABILITIES]; found++)
  378.     if (strcmp (infoname, found->cap) == 0)
  379.       return found;
  380.   return 0;
  381. }
  382.